<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    /*
    1. 相同点
      1.1 都是用来改变函数内部 this 的指向
      1.2 第一个参数都是 this 要指向的对象（即函数的上下文）
      1.3 都可以后续传递参数

    2. 不同点
      2.1 call	参数逐个传递 (arg1, arg2)  
      2.2 apply	参数作为数组传递 ([args])
      2.3 bind	参数逐个传递 (arg1, arg2)
     */

    const liuDeHua = {
      name: '刘德华',
      sing(s1, s2) {
        console.log(`${this.name}在唱: ${s1} ${s2}`);
      }
    }
    // liuDeHua.sing()

    const xiaoTou = {
      name: '小偷'
    }
    liuDeHua.sing.call(xiaoTou, '冰冻三尺', '铁马平心')
    liuDeHua.sing.apply(xiaoTou, ['冰冻三尺', '铁马平心'])

    const xiaoTouFn = liuDeHua.sing.bind(xiaoTou, '冰冻三尺', '铁马平心')
    xiaoTouFn()
  </script>
</body>

</html>